יש לי טבלה עם
איידי שהוא AUTO_INCREMENT
טקסט
ומזהה של סיפור .

הקטע שכל אחד מוסיף שורה לסיפור ולאחר 8 שורות לדוגמא המזהה של הסיפור עולה באחד וכך נוצר עוד סיפור שהמזהה שלו הוא +1 מהסיפור הקודם .

איך אפשר לעשות את זה? אפשר כיוון ?
אני משתמש בMySqli ...

חשבתי אולי על לבדוק מה ההכנסה האחרונה למסד . לראות מה המזהה של הסיפור , ואז לראות כמה שורות יש עם המזהה הזה . אם גדול מ8 אז ההכנסה תהיה עם המזהה הקודם +1 ...
אבל זה דיי ארוך ומסורבל ...

11 תשובות

avatar ענה intval ב 13 ליוני 2012 #

אין לזה פתרון מובנה כלשהו במסד ובשביל זה יש לרשותך PHP - לכתוב את הוגיקה שאתה רוצה.
גם הפתרון לא כזה ארוך. בסה"כ צריך לעשות שליפה אחת שתבדוק כמה שורות כבר קיימות עבור אותו סיפור.

אם עבור הסיפור שאתה כרגע עורך יש כבר 8 שורות - צריך להניס לטבלה הסיפורים רשומה חדשה, לקחת את האידי שלה עם last_insert_id ולהישתמש בו בתור מזהה סיפור בהכנסה של השורה.

avatar ענה משתמש_238626 ב 13 ליוני 2012 #

עשיתי ככה ומשום מה זה לא עובד ... הוספתי ELSEים והכל אבל עדיין לא...

עשיתי == שתיים כי רציתי שיעלה שורה עכשיו ולא לחכות ל8 שורות..

if ($result = $mysqli->query('SELECT * FROM book ORDER BY id LIMIT 1 ')){
                $row = $result->fetch_assoc();
                $result->close();
                }else echo "error 1 ";
                  if ($result = $mysqli->query('SELECT story_id FROM book WHERE story_id = "'.$row["story_id"].'" ')){
                  if($result->num_rows == 2 ) $story_id = $row["story_id"] + 1 ; else $story_id = $row["story_id"];
                 
                  echo "<p><h4>שורה אחרונה מסיפור מס ".sql_out($row["story_id"])." :
                  <span style='color:red'>"
.sql_out($row["text"])."...";
                  $result->close();
                  }else echo "error 2 ";
                    if (isset($_POST["submit"]) && (!empty($_POST["line"])) ){
                   
                    $line = trim($_POST["line"]);
                    $line = $mysqli->real_escape_string($line);
                    if(strlen($line) < 71){
                      if ($result = $mysqli->query('INSERT INTO book (text, story_id) VALUES ("'.$line.'", "'.$story_id.'")')){
                      echo "<h3>שורה חדשה הועלתה בהצלחה לסיפור מס ".$story_id."</h3>";
                      $result->close();
                      } else echo "error 3 ";
              }else echo "הטקסט חייב להיות מקסימום 70 תווים ! ";
            }

avatar ענה intval ב 13 ליוני 2012 #

זו שאילת שבשליפה אחת תאפשר לך לשלוף גם את מספר הסיפור האחרון וגם את כמות השורות שיש באותו סיפור.

SELECT story_id, COUNT(*) as 'count' FROM book
GROUP BY story_id ORDER BY story_id DESC LIMIT 1

תסתדר מכאן? אני לא מצליח לקרוא את הקוד שלך. הוא מבולגן מדי.

avatar ענה משתמש_238626 ב 13 ליוני 2012 #

אפשר הסבר קצת ?

איך אני מוציא משאילתה הזאת ? כי הרי לא יעזור לעשות לדגומא

$row = $result->fetch_assoc();

נכון ?

avatar ענה intval ב 13 ליוני 2012 #

למה שלא תנסה ?
להדפיס את תוכן המערך אפשר באמצעות הפונקציה print_r.
מה שכן מאוד יעזור זה אם תתחיל לקרוא למשתנים בשמות ברורים, לא row ו result אלה last_story

avatar ענה משתמש_238626 ב 13 ליוני 2012 #

mysqli_result Object ( [current_field] => 0 [field_count] => 2 [lengths] => [num_rows] => 1 [type] => 0 )

איך הם יוכלו לעזור לי ?
רק num_rows יכול ....

avatar ענה intval ב 13 ליוני 2012 #

אני חושב שטעית במשנתה שהיית אמור לעשות לו print_r . אתה לא חושב ?
+ שכחת לנסות להוציא נתונים מהשאילת בכלל.

avatar ענה משתמש_238928 ב 14 ליוני 2012 #

הבנתי את הטעות שלי ...
אבל הcount לא כ"כ יעזור לי כי אני יכול עם הnum_rows לראות כמה יש ...

אבל אני אשאיר את זה איך שזה היה מקודם כי זה עובד :)

עכשיו יש לי עוד שאלה .
בסיידבר אני שולף את הסיפוורים האחרונים כלומר אני עושה שליפה רגילה ורושם "סיפור מס" ואז את הסיפור ... איך אני עושה שמספר לא יחזור על עצמו ? כי זה שולף שורה שורה וזה ישלוף ככה :
"סיפור מס 1
סיפור מס 1 " וכו כך 8 פעמים ... עד שיגיע לסיפור מספר שתיים ...
אפשר עזרה ?
לבדוק אם המספר מזהה של הסיפור כבר נשלף ואם כן אז לדלג עד שימצא מספר שונה ממנו.

avatar ענה intval ב 14 ליוני 2012 #

למרות שבקום שלוש שאילתות אפשר לעשות אחת אתה עדיין מעדיף להשאיר את השלוש ?
------

select DISTINCT story_id from ..

ישלוף רק שורות עם story_id שהוא עדיין לא שלף.

---
בבקשה שאלות חדשות שים בתור שאלה חדשה באתר.
"לשלוף פעם אחת מכל סוג" היית כותרת שיכולה לעזור לאנשים אחריך למצוא את התשובה ישר.

avatar ענה משתמש_239561 ב 14 ליוני 2012 #

אוקי... תודה רבה !
זה אני ממחשב אחר...

avatar ענה intval ב 14 ליוני 2012 #

ממליץ לנסות את כפתור ה"הרשמה" :)